package org.example.documenttool.controller;

import com.alibaba.fastjson2.JSON;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.example.documenttool.entity.PPTDataEntity;
import org.example.documenttool.service.FileToolService;
import org.example.documenttool.service.PPTToolService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/tool")
public class ToolController {
    @Autowired
    private ChatClient zhiPuAI;
    @Autowired
    private PPTToolService pptToolService;
    @Autowired
    private FileToolService fileToolService;
    /**
     * html转pdf接口
     */
    @PostMapping("/html-pdf")
    public String htmlToPdf(String html, String fileName) throws IOException {
        String pdfPath = fileToolService.htmlToPdfOSS(html, fileName);
        //TODO 封装JSON
        Map<String, String> url= new HashMap<>();
        url.put("url", "https://webbook01."+pdfPath);
        String jsonUrl= JSON.toJSONString(url);
        //TODO 将文件存储到OSS存储系统
        return jsonUrl;
    }
    /**
     * 测试接口
     */
    @GetMapping("/test")
    public String test() {
        return "ok！！！";
    }
    /**
     * html转word接口
     */
    @PostMapping("/html-word")
    public String htmlToWord(String html, String fileName) throws IOException, Docx4JException {
        String wordPath = fileToolService.wordToHtml(html, fileName);
        Map<String,String> url=new HashMap<>();
        url.put("url","https://webbook01."+wordPath);
        String jsonUrl=JSON.toJSONString(url);
        return jsonUrl;
    }
    /**
     * PPT测试接口
     */
    @GetMapping("/ppt-test")
    public String pptTest(){
        pptToolService.getPPTTemplateStructure();
        return "ok！！！";
    }
    /**
     * PPT测试2：JSON输出接口
     */
    @GetMapping("/ppt-test2")
    public String pptTestJSON(String text) throws IOException, InterruptedException {
        String pptJson=pptToolService.setPPTTextShapeAsJson("C:/Users/33416/OneDrive/文档/DEMOPPT-02.pptx");
//        TODO LLM根据JSON生成对应JSON数据对PPT填充
        String llmJson=zhiPuAI.prompt()
                .user("用户的问题或主题："+text+"。已有的ppt模板JSON数据："+pptJson+"你现在要根据用户的问题生成一个对应的pptJson内容，后续客户会将这个json映射到PPT文件中，所以你要严格按照这个pptJSON模板输出，你只需要输出一个已经填充好的JSON数据，其余任何多余的文字都不需要。")
                .call()
                .content();
        return pptToolService.mapPptJSONToPPT(llmJson,"C:/Users/33416/OneDrive/文档/DEMOPPT-02.pptx");

    }
    /**
     * PPT测试2：JSON输出接口2
     */
    @GetMapping("/ppt-test3")
    public String pptTestJSON2() throws Exception {
        return "111";
    }
    /**
     * 测试获取PPT的页码||结构
     */
    @GetMapping("/ppt-test4")
    public String pptTestJSON3(String text,String pptUrl) throws Exception {
        List<PPTDataEntity> pptDataEntities= pptToolService.getSlideStructure(pptUrl);
//        String pptData=pptToolService.generatePPTStructure("关于中国金融的ppt");
        List<PPTDataEntity> newPPTData=  pptToolService.getSlideStructureByAI(pptDataEntities,text);
        // TODO 拿到新的PPT的URL
        String ossUrl= pptToolService.copyPPT(newPPTData, pptUrl);
        // TODO 获取json结构
        String jsonPpt=pptToolService.setPPTTextShapeAsJson(ossUrl);
//        // TODO 生成内容

        return pptToolService.setPPTTextShapeAsJson2(ossUrl,text,jsonPpt);
    }
}